#!/bin/bash

# 获取命令行参数
PROCESS_NAME=$1
ACTION=${2:-start}  # 默认操作为 restart

# 检查是否提供了进程名称
if [ -z "$PROCESS_NAME" ]; then
  echo "未提供进程名称！使用方法: $0 <进程名称> [restart|start|stop]"
  exit 1
fi

# 定义停止进程的函数
stop_process() {
  echo "正在停止所有 ${PROCESS_NAME} 进程..."
  
  # 使用 pgrep 查找所有与 PROCESS_NAME 匹配的进程ID
  PIDS=$(pgrep -f "${PROCESS_NAME}.php")
  
  if [ -z "$PIDS" ]; then
    echo "没有找到名为 ${PROCESS_NAME} 的进程。"
    return
  fi
  
  for PID in $PIDS; do
    kill -TERM "$PID"
    echo "已发送终止信号给进程 $PID"
  done
  
  # 等待一段时间以确保进程已停止
  sleep 2
  
  # 再次检查是否有残留的进程
  check_process
}

# 
status_process() {
  # 使用 pgrep 查找所有与 PROCESS_NAME 匹配的进程ID
  PIDS=$(pgrep -f "${PROCESS_NAME}.php")
  
  if [ -z "$PIDS" ]; then
    echo "没有找到名为 ${PROCESS_NAME} 的进程。"
    return
  fi
  
  ps -ef |grep "${PROCESS_NAME}.php"
}
check_process() {
  if ! pgrep -f "${PROCESS_NAME}.php" > /dev/null; then
    echo "所有 ${PROCESS_NAME} 进程已停止。"
  else
    echo "仍有名为 ${PROCESS_NAME} 的进程在运行。尝试强制终止..."
    for PID in $(pgrep -f "${PROCESS_NAME}.php"); do
      kill -KILL "$PID"
      echo "已强制终止进程 $PID"
    done
  fi
}

# 定义启动进程的函数
start_process() {
  PHP_SCRIPT="${PROCESS_NAME}.php"
  
  if [ -f "$PHP_SCRIPT" ]; then
    php "$PHP_SCRIPT" &
    echo "${PROCESS_NAME} 已启动。"
  else
    echo "指定的PHP脚本不存在: $PHP_SCRIPT"
    exit 1
  fi
}

# 定义重启进程的函数
restart_process() {
  stop_process  # 先停止进程
  sleep 1
  start_process # 然后启动进程
  echo "${PROCESS_NAME} 已重启。"
}

# 根据操作类型执行相应动作
case $ACTION in
  status)
    status_process
    ;;
  stop)
    stop_process
    ;;
  start)
    start_process
    ;;
  restart)
    restart_process
    ;;
  *)
    echo "未知的操作类型 '$ACTION'！请使用 'restart', 'start', 或 'stop'。status"
    exit 1
    ;;
esac